0%

智能硬件系统开发之语音通信

智能硬件系统开发之语音通信

题目 智能硬件系统开发之语音通信
主要内容 学习和掌握构建基于嵌入式硬件平台和嵌入式 Linux 软件开发环境的方法,掌握嵌入式音频应用程序设计与开发手段,在此基础上通过 Socket网络编程实现基于嵌入式 IP 网络的双向语音通信。
设计要求 基本要求: 1、在嵌入式系统环境下,实现本地语音文件录放(WAV格式); 2、通过 Socket 网络编程实现 IP 网络双向语音传输。 扩展要求:通过调用百度、科大讯飞等语音识别库实现简单命令词识别功能,实现语音数据的压缩编码,G.711、G.729等格式均可。也可以自行设计其它扩展功能。
主要仪器设备 1、嵌入式开发系统 1 套;2、计算机 1 台,安装Ubuntu操作系统及 arm-linux 交叉编译工具;3、耳麦 1 个;4、网线 2 根,IP 地址 2 个

一、设计内容

学习和掌握构建基于嵌入式硬件平台和嵌入式 Linux 软件开发环境的方法,掌握嵌入式音频应用程序设计与开发手段,在此基础上通过 Socket网络编程实现基于嵌入式 IP 网络的双向语音通信。

二、设计要求

1、基本要求

(1)在嵌入式系统环境下,实现本地语音文件录放(WAV格式);

(2)通过 Socket 网络编程实现 IP 网络双向语音传输。

2、扩展要求

通过调用百度、科大讯飞等语音识别库实现简单命令词识别功能,实现语音数据的压缩编码。也可以自行设计其它扩展功能。

三、主要仪器设备

1、嵌入式开发系统 1 套
2、计算机 1 台,安装Ubuntu操作系统及 arm-linux 交叉编译工具
3、耳麦 1 个
4、网线 2 根,IP 地址 2 个

步骤

(一).在嵌入式系统环境下,实现本地语音文件录放(WAV格式)

(1)向arm开发板移植ALSA库

1.下载库文件与工具

alsa-lib-1.0.23.tar.bz2

alsa-utils-1.0.23.tar.bz2

将文件移到Ubuntu上

解压alsa-lib-1.0.23.tar.bz2,进入解压所得目录

2.使用命令

./configure –host=arm-none-linux-gnueabi –prefix=/opt/arm-alsa

–host参数指定了交叉编译器为"arm-none-linux-gnueabi、",

–prefix参数指定了alsa-lib的目标安装目录

3.使用命令

make

sudo make install

安装库

4.解压alsa-utils-1.0.23.tar.bz2,进入解压所得目录

5.使用命令

./configure –host=arm-none-linux-gnueabi –prefix=/opt/arm-alsa –with-alsa-inc-prefix=/opt/arm-alsa/include –with-alsa-prefix=/opt/arm-alsa/lib

–disable-alsamixer –disable-xmlto

其中–with-alsa-inc-prefix和–with-alsa-prefix分别指定了交叉编译util应用所需要的alsa-lib的头文件和库文件;

–disable-alsamixer表示不编译生成alsamixer这个应用程序,

6.使用命令

touch alsaconf/po/t-ja.gmo

touch alsaconf/po/t-ru.gmo

7.使用命令

make

sudo make install

安装完后进入安装目录可看到以下文件

1

将该目录全部拷贝到/source/rootfs下,移植ALSA库完成。

(2)编辑语音录制与播放程序

一个典型的音频程序应该具有以下结构:打开音频设备、为设备设置读写参数、向音频设备读/写音频数据、关闭设备。Alsa库为我们实现这些操作提供了丰富的接口。

播放程序代码如下:



录制音频程序如下



(3)交叉编译

使用交叉编译工具编译程序

将可执行文件移动到开发板目录下

(4)运行程序

在putty窗口中分别运行音频录制与播放程序

1.通过 Socket 网络编程实现 IP 网络双向语音传输

socket通信其实是有两种方式:TCP和UDP过程。

基于TCP的socket通信服务端的具体步骤:(1)创建ServerSocket对象,绑定监听端口。(2)通过accept()方法监听客户端请求(3)连接建立后,通过输入流读取客户端的数据(4)通过输出流,向客户端回应信息

基于TCP的socket通信客户端的步骤:(1)创建Socket并指定端口(2)通过输出流向服务端发送一个请求(3)等待服务端的回应 获取输入流,读取客户端信息(将字节流转化为字符流),并保存在缓冲区中(4)关闭资源

  1. 编写服务端** 程序**


编写客户端程序


  1. 编译

编译服务端程序,将客户端程序进行交叉编译后移植到开发板上

4.** 运行程序**

查看IP

打开服务器

在开发板中运行客户端,ip地址为服务器地址

程序执行,客户端向服务器发送音频数据。之后可以看到服务器端收到了音频数据,并保存到本地。

五、总结

在嵌入式系统环境下,实现本地语音文件录放,通过 Socket 网络编程实现 IP 网络双向语音传输。本地语音文件录放的实现首先是先将alsa库通过交叉编译后移植到开发板上,接着通过调用alsa库的函数来实现录制与播放声音程序的编写,程序编写完后,通过交叉编译生成在开发板上的可执行文件。IP 网络双向语音传输实现是通过socket编程将录制的音频数据通过网络传输给对方,将数据保存后即可播放。